#include <iostream>
/*
    设计模式的原则:
        1. 高层模块不依赖低层模块，二者依赖抽象     否则耦合度会非常高
        2. 抽象不依赖于具体实现，具体实现依赖抽象    要不然搞不定
        3. 开放封闭：对扩展开放，对修改关闭         继承或者组合
        4. 面向接口编程
        5. 封装变化点 隔离稳定点与变化点
        6. 单一职责原则
        7. 自类必须能够替换父类
*/

